# Написать полную программу, которая вводит два натуральных числа и выводит их наибольший общий делитель.
# Для вычисления НОД написать рекурсивную функцию nod, которая принимает два числа в a0 и a1 и возвращает значение в a0.


.data
err:	.asciz	"ERROR\n"

.text
Begin:
	li	a7, 5
	ecall
	bgez	a0, .l1
	neg	a0, a0
.l1:	mv	a1, a0
	ecall
	bgez	a0, .l2
	neg	a0, a0		
.l2:	or	t1, a0, a1
	beqz	t1, .bothzero
	li	a2, 1	
	jal	Nod
	li      a7, 1
        ecall	
	b	exit
.bothzero:
	la      a0, err
	li      a7, 4
        ecall	
exit:	li	a7, 10
	ecall


Nod:	addi    sp, sp, -4
        sw      ra, (sp)
	beqz	a0, .a0zero
	beqz	a1, .a1zero
	
	andi	t0, a0, 1
	beqz	t0, .a0even
	b	.a0odd
.a0even:
	andi	t1, a1, 1
	beqz	t1, .botheven
	srai	a0, a0, 1
	jal	Nod
	b	.exit
.botheven:
	srai	a0, a0, 1
	srai	a1, a1, 1			
	slli	a2, a2, 1
	jal	Nod
	b	.exit
.a0odd:
	andi	t1, a1, 1
	beqz	t1, .a1even	
	bge	a0, a1, .a0gea1
	sub	a1, a1, a0
	jal	Nod
	b	.exit
.a1even:
	srai	a1, a1, 1
	jal	Nod
	b	.exit	
.a0gea1:
	sub	a0, a0, a1
	jal	Nod
	b	.exit
	
.a0zero:
	mul	a0, a1, a2
	b	.exit
.a1zero:
	mul	a0, a0, a2		
.exit:	lw      ra, (sp)
        addi    sp, sp, 4
	ret	
	
 
